<!doctype html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title>dependency graph</title>
    <style>
      .node:active path,
.node:hover path,
.node.current path,
.node:active polygon,
.node:hover polygon,
.node.current polygon {
  stroke: fuchsia;
  stroke-width: 2;
}

.edge:active path,
.edge:hover path,
.edge.current path,
.edge:active ellipse,
.edge:hover ellipse,
.edge.current ellipse {
  stroke: url(#edgeGradient);
  stroke-width: 3;
  stroke-opacity: 1;
}

.edge:active polygon,
.edge:hover polygon,
.edge.current polygon {
  stroke: fuchsia;
  stroke-width: 3;
  fill: fuchsia;
  stroke-opacity: 1;
  fill-opacity: 1;
}

.edge:active text,
.edge:hover text {
  fill: fuchsia;
}

.cluster path {
  stroke-width: 3;
}

.cluster:active path,
.cluster:hover path {
  fill: #ffff0011;
}

div.hint {
  background-color: #000000aa;
  color: white;
  font-family: Arial, Helvetica, sans-serif;
  border-radius: 1rem;
  position: fixed;
  top: calc(50% - 4em);
  right: calc(50% - 10em);
  border: none;
  padding: 1em 3em 1em 1em;
}

.hint button {
  position: absolute;
  font-weight: bolder;
  right: 0.6em;
  top: 0.6em;
  color: inherit;
  background-color: inherit;
  border: 1px solid currentColor;
  border-radius: 1em;
  margin-left: 0.6em;
}

.hint a {
  color: inherit;
}

#button_help {
  color: white;
  background-color: #00000011;
  border-radius: 1em;
  position: fixed;
  top: 1em;
  right: 1em;
  font-size: 24pt;
  font-weight: bolder;
  width: 2em;
  height: 2em;
  border: none;
}

#button_help:hover {
  cursor: pointer;
  background-color: #00000077;
}

@media print {
  #button_help {
    display: none;
  }

  div.hint {
    display: none;
  }
}

    </style>
  </head>
  <body>
    <button id="button_help">?</button>
    <div id="hints" class="hint" style="display: none">
      <button id="close-hints">x</button>
      <span id="hint-text"></span>
      <ul>
        <li><b>Hover</b> - highlight</li>
        <li><b>Right-click</b> - pin highlight</li>
        <li><b>ESC</b> - clear</li>
      </ul>
    </div>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.0.4 (20251115.1723)
 -->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="1291pt" height="475pt"
 viewBox="0.00 0.00 1291.00 475.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 470.85)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-470.85 1287,-470.85 1287,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_src</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M20,-8C20,-8 1263,-8 1263,-8 1269,-8 1275,-14 1275,-20 1275,-20 1275,-429.1 1275,-429.1 1275,-435.1 1269,-441.1 1263,-441.1 1263,-441.1 20,-441.1 20,-441.1 14,-441.1 8,-435.1 8,-429.1 8,-429.1 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text xml:space="preserve" text-anchor="middle" x="641.5" y="-428.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">src</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_src/cli</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M652,-304.35C652,-304.35 886,-304.35 886,-304.35 892,-304.35 898,-310.35 898,-316.35 898,-316.35 898,-403.35 898,-403.35 898,-409.35 892,-415.35 886,-415.35 886,-415.35 652,-415.35 652,-415.35 646,-415.35 640,-409.35 640,-403.35 640,-403.35 640,-316.35 640,-316.35 640,-310.35 646,-304.35 652,-304.35"/>
<text xml:space="preserve" text-anchor="middle" x="769" y="-402.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">cli</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_src/cli/listeners</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M724,-312.35C724,-312.35 816,-312.35 816,-312.35 822,-312.35 828,-318.35 828,-324.35 828,-324.35 828,-351.85 828,-351.85 828,-357.85 822,-363.85 816,-363.85 816,-363.85 724,-363.85 724,-363.85 718,-363.85 712,-357.85 712,-351.85 712,-351.85 712,-324.35 712,-324.35 712,-318.35 718,-312.35 724,-312.35"/>
<text xml:space="preserve" text-anchor="middle" x="770" y="-351.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">listeners</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_src/config&#45;utl</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M159,-251.93C159,-251.93 265,-251.93 265,-251.93 271,-251.93 277,-257.93 277,-263.93 277,-263.93 277,-344.78 277,-344.78 277,-350.78 271,-356.78 265,-356.78 265,-356.78 159,-356.78 159,-356.78 153,-356.78 147,-350.78 147,-344.78 147,-344.78 147,-263.93 147,-263.93 147,-257.93 153,-251.93 159,-251.93"/>
<text xml:space="preserve" text-anchor="middle" x="212" y="-344.23" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">config&#45;utl</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_src/enrich</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M683,-75.5C683,-75.5 957,-75.5 957,-75.5 963,-75.5 969,-81.5 969,-87.5 969,-87.5 969,-199.1 969,-199.1 969,-205.1 963,-211.1 957,-211.1 957,-211.1 683,-211.1 683,-211.1 677,-211.1 671,-205.1 671,-199.1 671,-199.1 671,-87.5 671,-87.5 671,-81.5 677,-75.5 683,-75.5"/>
<text xml:space="preserve" text-anchor="middle" x="820" y="-198.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">enrich</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_src/enrich/derive</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M771,-83.5C771,-83.5 949,-83.5 949,-83.5 955,-83.5 961,-89.5 961,-95.5 961,-95.5 961,-146.68 961,-146.68 961,-152.68 955,-158.68 949,-158.68 949,-158.68 771,-158.68 771,-158.68 765,-158.68 759,-152.68 759,-146.68 759,-146.68 759,-95.5 759,-95.5 759,-89.5 765,-83.5 771,-83.5"/>
<text xml:space="preserve" text-anchor="middle" x="860" y="-146.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">derive</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_src/extract</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M188,-41.75C188,-41.75 366,-41.75 366,-41.75 372,-41.75 378,-47.75 378,-53.75 378,-53.75 378,-206.18 378,-206.18 378,-212.18 372,-218.18 366,-218.18 366,-218.18 188,-218.18 188,-218.18 182,-218.18 176,-212.18 176,-206.18 176,-206.18 176,-53.75 176,-53.75 176,-47.75 182,-41.75 188,-41.75"/>
<text xml:space="preserve" text-anchor="middle" x="277" y="-205.62" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">extract</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_src/main</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M408,-166.68C408,-166.68 641,-166.68 641,-166.68 647,-166.68 653,-172.68 653,-178.68 653,-178.68 653,-284.35 653,-284.35 653,-290.35 647,-296.35 641,-296.35 641,-296.35 408,-296.35 408,-296.35 402,-296.35 396,-290.35 396,-284.35 396,-284.35 396,-178.68 396,-178.68 396,-172.68 402,-166.68 408,-166.68"/>
<text xml:space="preserve" text-anchor="middle" x="524.5" y="-283.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">main</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_src/report</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1051,-41.75C1051,-41.75 1245,-41.75 1245,-41.75 1251,-41.75 1257,-47.75 1257,-53.75 1257,-53.75 1257,-146.68 1257,-146.68 1257,-152.68 1251,-158.68 1245,-158.68 1245,-158.68 1051,-158.68 1051,-158.68 1045,-158.68 1039,-152.68 1039,-146.68 1039,-146.68 1039,-53.75 1039,-53.75 1039,-47.75 1045,-41.75 1051,-41.75"/>
<text xml:space="preserve" text-anchor="middle" x="1148" y="-146.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">report</text>
</g>
<!-- bin -->
<g id="node1" class="node">
<title>bin</title>
<g id="a_node1"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/bin" xlink:title="bin">
<polygon fill="#ffffcc" stroke="black" points="760,-466.85 707.97,-466.85 706,-464.88 706,-449.1 758.03,-449.1 760,-451.07 760,-466.85"/>
<polyline fill="none" stroke="black" points="758.03,-464.88 706,-464.88"/>
<polyline fill="none" stroke="black" points="758.03,-464.88 758.03,-449.1"/>
<polyline fill="none" stroke="black" points="758.03,-464.88 760,-466.85"/>
<text xml:space="preserve" text-anchor="start" x="726.62" y="-454.3" font-family="Helvetica,sans-Serif" font-size="9.00">bin</text>
</a>
</g>
</g>
<!-- src/cli -->
<!-- bin&#45;&gt;src/cli -->
<g id="edge1" class="edge">
<title>bin&#45;&gt;src/cli</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M705.75,-458C690.73,-458 675.1,-458 675.1,-458 675.1,-458 675.1,-391.66 675.1,-391.66"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="677.2,-391.66 675.1,-385.66 673,-391.66 677.2,-391.66"/>
</g>
<!-- src/cli/tools -->
<g id="node3" class="node">
<title>src/cli/tools</title>
<g id="a_node3"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/cli/tools" xlink:title="tools">
<polygon fill="#ccccff" stroke="blue" points="817,-389.6 764.97,-389.6 763,-387.63 763,-371.85 815.03,-371.85 817,-373.82 817,-389.6"/>
<polyline fill="none" stroke="blue" points="815.03,-387.63 763,-387.63"/>
<polyline fill="none" stroke="blue" points="815.03,-387.63 815.03,-371.85"/>
<polyline fill="none" stroke="blue" points="815.03,-387.63 817,-389.6"/>
<text xml:space="preserve" text-anchor="start" x="780.25" y="-377.05" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">tools</text>
</a>
</g>
</g>
<!-- bin&#45;&gt;src/cli/tools -->
<g id="edge2" class="edge">
<title>bin&#45;&gt;src/cli/tools</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M746.75,-448.73C746.75,-429.1 746.75,-385 746.75,-385 746.75,-385 753.83,-385 753.83,-385"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="753.83,-387.1 759.83,-385 753.83,-382.9 753.83,-387.1"/>
</g>
<!-- src/utl -->
<g id="node7" class="node">
<title>src/utl</title>
<g id="a_node7"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/utl" xlink:title="utl">
<polygon fill="#cccccc" stroke="blue" points="304,-33.75 251.97,-33.75 250,-31.78 250,-16 302.03,-16 304,-17.97 304,-33.75"/>
<polyline fill="none" stroke="blue" points="302.03,-31.78 250,-31.78"/>
<polyline fill="none" stroke="blue" points="302.03,-31.78 302.03,-16"/>
<polyline fill="none" stroke="blue" points="302.03,-31.78 304,-33.75"/>
<text xml:space="preserve" text-anchor="start" x="272.12" y="-21.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">utl</text>
</a>
</g>
</g>
<!-- src/cli&#45;&gt;src/utl -->
<g id="edge12" class="edge">
<title>src/cli&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M676.9,-382.71C676.9,-384.55 676.9,-387 676.9,-387 676.9,-387 82,-387 82,-387 82,-387 82,-20 82,-20 82,-20 240.86,-20 240.86,-20"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="240.86,-22.1 246.86,-20 240.86,-17.9 240.86,-22.1"/>
</g>
<!-- src/cli/init&#45;config -->
<g id="node9" class="node">
<title>src/cli/init&#45;config</title>
<g id="a_node9"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/cli/init-config" xlink:title="init&#45;config">
<polygon fill="#ccccff" stroke="black" points="703.88,-338.1 650.1,-338.1 648.12,-336.13 648.12,-320.35 701.9,-320.35 703.88,-322.32 703.88,-338.1"/>
<polyline fill="none" stroke="black" points="701.9,-336.13 648.12,-336.13"/>
<polyline fill="none" stroke="black" points="701.9,-336.13 701.9,-320.35"/>
<polyline fill="none" stroke="black" points="701.9,-336.13 703.88,-338.1"/>
<text xml:space="preserve" text-anchor="start" x="656.12" y="-325.55" font-family="Helvetica,sans-Serif" font-size="9.00">init&#45;config</text>
</a>
</g>
</g>
<!-- src/cli&#45;&gt;src/cli/init&#45;config -->
<g id="edge6" class="edge">
<title>src/cli&#45;&gt;src/cli/init&#45;config</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M678.05,-381C683,-381 695.18,-381 695.18,-381 695.18,-381 695.18,-347.27 695.18,-347.27"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="697.28,-347.27 695.18,-341.27 693.08,-347.27 697.28,-347.27"/>
</g>
<!-- src/cli/listeners -->
<!-- src/cli&#45;&gt;src/cli/listeners -->
<g id="edge7" class="edge">
<title>src/cli&#45;&gt;src/cli/listeners</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M676.6,-378.71C676.6,-372.64 676.6,-355 676.6,-355 676.6,-355 816.6,-355 816.6,-355 816.6,-355 816.6,-339.94 816.6,-339.94"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="818.7,-339.94 816.6,-333.94 814.5,-339.94 818.7,-339.94"/>
</g>
<!-- src/cli/listeners/performance&#45;log -->
<g id="node11" class="node">
<title>src/cli/listeners/performance&#45;log</title>
<g id="a_node11"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/cli/listeners/performance-log" xlink:title="performance&#45;log">
<polygon fill="#ccccff" stroke="black" points="803.75,-338.1 722.22,-338.1 720.25,-336.13 720.25,-320.35 801.78,-320.35 803.75,-322.32 803.75,-338.1"/>
<polyline fill="none" stroke="black" points="801.78,-336.13 720.25,-336.13"/>
<polyline fill="none" stroke="black" points="801.78,-336.13 801.78,-320.35"/>
<polyline fill="none" stroke="black" points="801.78,-336.13 803.75,-338.1"/>
<text xml:space="preserve" text-anchor="start" x="728.25" y="-325.55" font-family="Helvetica,sans-Serif" font-size="9.00">performance&#45;log</text>
</a>
</g>
</g>
<!-- src/cli&#45;&gt;src/cli/listeners/performance&#45;log -->
<g id="edge8" class="edge">
<title>src/cli&#45;&gt;src/cli/listeners/performance&#45;log</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M674.18,-380C670.22,-380 661.16,-380 661.16,-380 661.16,-380 661.16,-374 661.16,-374 661.16,-374 733.5,-374 733.5,-374 733.5,-374 733.5,-347.31 733.5,-347.31"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="735.6,-347.31 733.5,-341.31 731.4,-347.31 735.6,-347.31"/>
</g>
<!-- src/cli/utl -->
<g id="node12" class="node">
<title>src/cli/utl</title>
<g id="a_node12"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/cli/utl" xlink:title="utl">
<polygon fill="#ccccff" stroke="black" points="890,-338.1 837.97,-338.1 836,-336.13 836,-320.35 888.03,-320.35 890,-322.32 890,-338.1"/>
<polyline fill="none" stroke="black" points="888.03,-336.13 836,-336.13"/>
<polyline fill="none" stroke="black" points="888.03,-336.13 888.03,-320.35"/>
<polyline fill="none" stroke="black" points="888.03,-336.13 890,-338.1"/>
<text xml:space="preserve" text-anchor="start" x="858.12" y="-325.55" font-family="Helvetica,sans-Serif" font-size="9.00">utl</text>
</a>
</g>
</g>
<!-- src/cli&#45;&gt;src/cli/utl -->
<g id="edge9" class="edge">
<title>src/cli&#45;&gt;src/cli/utl</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M676,-382.78C676,-390.73 676,-419 676,-419 676,-419 863,-419 863,-419 863,-419 863,-347.52 863,-347.52"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="865.1,-347.52 863,-341.52 860.9,-347.52 865.1,-347.52"/>
</g>
<!-- src/config&#45;utl -->
<!-- src/cli&#45;&gt;src/config&#45;utl -->
<g id="edge10" class="edge">
<title>src/cli&#45;&gt;src/config&#45;utl</title>
<path fill="none" stroke="#229999" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M678.02,-380C681.07,-380 686.49,-380 686.49,-380 686.49,-380 686.49,-377 686.49,-377 686.49,-377 212,-377 212,-377 212,-377 212,-340.3 212,-340.3"/>
<polygon fill="#229999" fill-opacity="0.466667" stroke="#229999" stroke-width="2" stroke-opacity="0.466667" points="214.1,-340.3 212,-334.3 209.9,-340.3 214.1,-340.3"/>
</g>
<!-- src/main -->
<!-- src/cli&#45;&gt;src/main -->
<g id="edge11" class="edge">
<title>src/cli&#45;&gt;src/main</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M673.81,-381C662.37,-381 610.08,-381 610.08,-381 610.08,-381 610.08,-279.77 610.08,-279.77"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="612.18,-279.77 610.08,-273.77 607.98,-279.77 612.18,-279.77"/>
</g>
<!-- src/config&#45;utl/extract&#45;depcruise&#45;config -->
<g id="node15" class="node">
<title>src/config&#45;utl/extract&#45;depcruise&#45;config</title>
<g id="a_node15"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/config-utl/extract-depcruise-config" xlink:title="extract&#45;depcruise&#45;config">
<polygon fill="#99ffff" stroke="black" points="269.12,-277.68 156.85,-277.68 154.88,-275.7 154.88,-259.93 267.15,-259.93 269.12,-261.9 269.12,-277.68"/>
<polyline fill="none" stroke="black" points="267.15,-275.7 154.88,-275.7"/>
<polyline fill="none" stroke="black" points="267.15,-275.7 267.15,-259.93"/>
<polyline fill="none" stroke="black" points="267.15,-275.7 269.12,-277.68"/>
<text xml:space="preserve" text-anchor="start" x="162.88" y="-265.12" font-family="Helvetica,sans-Serif" font-size="9.00">extract&#45;depcruise&#45;config</text>
</a>
</g>
</g>
<!-- src/cli&#45;&gt;src/config&#45;utl/extract&#45;depcruise&#45;config -->
<g id="edge13" class="edge">
<title>src/cli&#45;&gt;src/config&#45;utl/extract&#45;depcruise&#45;config</title>
<path fill="none" stroke="#229999" stroke-width="2" stroke-opacity="0.466667" d="M674.43,-382C645.98,-382 241.46,-382 241.46,-382 241.46,-382 241.46,-287.09 241.46,-287.09"/>
<polygon fill="#229999" fill-opacity="0.466667" stroke="#229999" stroke-width="2" stroke-opacity="0.466667" points="243.56,-287.09 241.46,-281.09 239.36,-287.09 243.56,-287.09"/>
</g>
<!-- src/report/dot&#45;webpage -->
<g id="node17" class="node">
<title>src/report/dot&#45;webpage</title>
<g id="a_node17"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/dot-webpage" xlink:title="dot&#45;webpage">
<polygon fill="#ffccff" stroke="black" points="1133,-132.93 1064.97,-132.93 1063,-130.95 1063,-115.17 1131.03,-115.17 1133,-117.15 1133,-132.93"/>
<polyline fill="none" stroke="black" points="1131.03,-130.95 1063,-130.95"/>
<polyline fill="none" stroke="black" points="1131.03,-130.95 1131.03,-115.17"/>
<polyline fill="none" stroke="black" points="1131.03,-130.95 1133,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="1071" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">dot&#45;webpage</text>
</a>
</g>
</g>
<!-- src/cli/tools&#45;&gt;src/report/dot&#45;webpage -->
<g id="edge18" class="edge">
<title>src/cli/tools&#45;&gt;src/report/dot&#45;webpage</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M817.46,-375C888.2,-375 1071.1,-375 1071.1,-375 1071.1,-375 1071.1,-142.31 1071.1,-142.31"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1073.2,-142.31 1071.1,-136.31 1069,-142.31 1073.2,-142.31"/>
</g>
<!-- src -->
<!-- src/cache -->
<g id="node5" class="node">
<title>src/cache</title>
<g id="a_node5"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/cache" xlink:title="cache">
<polygon fill="#ffffcc" stroke="black" points="388,-243.93 335.97,-243.93 334,-241.95 334,-226.18 386.03,-226.18 388,-228.15 388,-243.93"/>
<polyline fill="none" stroke="black" points="386.03,-241.95 334,-241.95"/>
<polyline fill="none" stroke="black" points="386.03,-241.95 386.03,-226.18"/>
<polyline fill="none" stroke="black" points="386.03,-241.95 388,-243.93"/>
<text xml:space="preserve" text-anchor="start" x="348.62" y="-231.38" font-family="Helvetica,sans-Serif" font-size="9.00">cache</text>
</a>
</g>
</g>
<!-- src/extract/transpile -->
<g id="node6" class="node">
<title>src/extract/transpile</title>
<g id="a_node6"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/extract/transpile" xlink:title="transpile">
<polygon fill="#ccffcc" stroke="black" points="356,-192.43 303.97,-192.43 302,-190.45 302,-174.68 354.03,-174.68 356,-176.65 356,-192.43"/>
<polyline fill="none" stroke="black" points="354.03,-190.45 302,-190.45"/>
<polyline fill="none" stroke="black" points="354.03,-190.45 354.03,-174.68"/>
<polyline fill="none" stroke="black" points="354.03,-190.45 356,-192.43"/>
<text xml:space="preserve" text-anchor="start" x="311.38" y="-179.88" font-family="Helvetica,sans-Serif" font-size="9.00">transpile</text>
</a>
</g>
</g>
<!-- src/cache&#45;&gt;src/extract/transpile -->
<g id="edge3" class="edge">
<title>src/cache&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M345,-226.08C345,-226.08 345,-201.79 345,-201.79"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="347.1,-201.79 345,-195.79 342.9,-201.79 347.1,-201.79"/>
</g>
<!-- src/cache&#45;&gt;src/utl -->
<g id="edge4" class="edge">
<title>src/cache&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M376,-225.71C376,-185.59 376,-30 376,-30 376,-30 313.34,-30 313.34,-30"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.34,-27.9 307.34,-30 313.34,-32.1 313.34,-27.9"/>
</g>
<!-- src/graph&#45;utl -->
<g id="node8" class="node">
<title>src/graph&#45;utl</title>
<g id="a_node8"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/graph-utl" xlink:title="graph&#45;utl">
<polygon fill="#ffcccc" stroke="black" points="694,-67.5 641.97,-67.5 640,-65.53 640,-49.75 692.03,-49.75 694,-51.72 694,-67.5"/>
<polyline fill="none" stroke="black" points="692.03,-65.53 640,-65.53"/>
<polyline fill="none" stroke="black" points="692.03,-65.53 692.03,-49.75"/>
<polyline fill="none" stroke="black" points="692.03,-65.53 694,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="648.62" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">graph&#45;utl</text>
</a>
</g>
</g>
<!-- src/cache&#45;&gt;src/graph&#45;utl -->
<g id="edge5" class="edge">
<title>src/cache&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M382,-225.82C382,-188.93 382,-54 382,-54 382,-54 630.65,-54 630.65,-54"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="630.65,-56.1 636.65,-54 630.65,-51.9 630.65,-56.1"/>
</g>
<!-- src/extract/transpile&#45;&gt;src/utl -->
<g id="edge57" class="edge">
<title>src/extract/transpile&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M301.82,-179C277.62,-179 246,-179 246,-179 246,-179 246,-30 246,-30 246,-30 246.38,-30 246.38,-30"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="240.77,-32.1 246.77,-30 240.77,-27.9 240.77,-32.1"/>
</g>
<!-- src/extract/swc -->
<g id="node29" class="node">
<title>src/extract/swc</title>
<g id="a_node29"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/extract/swc" xlink:title="swc">
<polygon fill="#ccffcc" stroke="black" points="356,-132.93 303.97,-132.93 302,-130.95 302,-115.17 354.03,-115.17 356,-117.15 356,-132.93"/>
<polyline fill="none" stroke="black" points="354.03,-130.95 302,-130.95"/>
<polyline fill="none" stroke="black" points="354.03,-130.95 354.03,-115.17"/>
<polyline fill="none" stroke="black" points="354.03,-130.95 356,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="321.12" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">swc</text>
</a>
</g>
</g>
<!-- src/extract/transpile&#45;&gt;src/extract/swc -->
<g id="edge56" class="edge">
<title>src/extract/transpile&#45;&gt;src/extract/swc</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M329,-174.25C329,-174.25 329,-142.11 329,-142.11"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="331.1,-142.11 329,-136.11 326.9,-142.11 331.1,-142.11"/>
</g>
<!-- src/graph&#45;utl&#45;&gt;src/utl -->
<g id="edge61" class="edge">
<title>src/graph&#45;utl&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M667,-49.26C667,-38.71 667,-23 667,-23 667,-23 313.45,-23 313.45,-23"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.45,-20.9 307.45,-23 313.45,-25.1 313.45,-20.9"/>
</g>
<!-- src/cli/init&#45;config&#45;&gt;src/cli -->
<g id="edge14" class="edge">
<title>src/cli/init&#45;config&#45;&gt;src/cli</title>
<g id="a_edge14"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M675.4,-338.2C675.4,-338.2 675.4,-369.82 675.4,-369.82"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="673.3,-369.82 675.4,-375.82 677.5,-369.82 673.3,-369.82"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="629.27" y="-355.21" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/cli/init&#45;config&#45;&gt;src/extract/transpile -->
<g id="edge16" class="edge">
<title>src/cli/init&#45;config&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M647.79,-326C562.43,-326 312.67,-326 312.67,-326 312.67,-326 312.67,-201.92 312.67,-201.92"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="314.77,-201.92 312.67,-195.92 310.57,-201.92 314.77,-201.92"/>
</g>
<!-- src/cli/init&#45;config&#45;&gt;src/utl -->
<g id="edge17" class="edge">
<title>src/cli/init&#45;config&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M647.87,-323C640.96,-323 635.5,-323 635.5,-323 635.5,-323 635.5,-24 635.5,-24 635.5,-24 313.27,-24 313.27,-24"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.27,-21.9 307.27,-24 313.27,-26.1 313.27,-21.9"/>
</g>
<!-- src/extract/tsc -->
<g id="node16" class="node">
<title>src/extract/tsc</title>
<g id="a_node16"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/extract/tsc" xlink:title="tsc">
<polygon fill="#ccffcc" stroke="black" points="370,-67.5 317.97,-67.5 316,-65.53 316,-49.75 368.03,-49.75 370,-51.72 370,-67.5"/>
<polyline fill="none" stroke="black" points="368.03,-65.53 316,-65.53"/>
<polyline fill="none" stroke="black" points="368.03,-65.53 368.03,-49.75"/>
<polyline fill="none" stroke="black" points="368.03,-65.53 370,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="337.38" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">tsc</text>
</a>
</g>
</g>
<!-- src/cli/init&#45;config&#45;&gt;src/extract/tsc -->
<g id="edge15" class="edge">
<title>src/cli/init&#45;config&#45;&gt;src/extract/tsc</title>
<g id="a_edge15"><a xlink:title="cli&#45;to&#45;main&#45;only">
<path fill="none" stroke="red" stroke-width="2" d="M647.67,-325C595.47,-325 489.44,-325 489.44,-325 489.44,-325 489.44,-63 489.44,-63 489.44,-63 379.23,-63 379.23,-63"/>
<polygon fill="red" stroke="red" stroke-width="2" points="379.23,-60.9 373.23,-63 379.23,-65.1 379.23,-60.9"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="457.94" y="-209.46" font-family="Helvetica,sans-Serif" font-size="9.00" fill="red">cli&#45;to&#45;main&#45;only</text>
</g>
<!-- src/config&#45;utl&#45;&gt;src/utl -->
<g id="edge19" class="edge">
<title>src/config&#45;utl&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M214.07,-329C234.31,-329 396.25,-329 396.25,-329 396.25,-329 396.25,-29 396.25,-29 396.25,-29 313.39,-29 313.39,-29"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.39,-26.9 307.39,-29 313.39,-31.1 313.39,-26.9"/>
</g>
<!-- src/config&#45;utl&#45;&gt;src/config&#45;utl/extract&#45;depcruise&#45;config -->
<g id="edge20" class="edge">
<title>src/config&#45;utl&#45;&gt;src/config&#45;utl/extract&#45;depcruise&#45;config</title>
<path fill="none" stroke="#229999" stroke-width="2" stroke-opacity="0.466667" d="M212,-326.93C212,-326.93 212,-287.15 212,-287.15"/>
<polygon fill="#229999" fill-opacity="0.466667" stroke="#229999" stroke-width="2" stroke-opacity="0.466667" points="214.1,-287.15 212,-281.15 209.9,-287.15 214.1,-287.15"/>
</g>
<!-- src/main&#45;&gt;src/cache -->
<g id="edge67" class="edge">
<title>src/main&#45;&gt;src/cache</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.200000" d="M606.86,-269C582.62,-269 361,-269 361,-269 361,-269 361,-253.35 361,-253.35"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="363.1,-253.35 361,-247.35 358.9,-253.35 363.1,-253.35"/>
</g>
<!-- src/main&#45;&gt;src/extract/transpile -->
<g id="edge62" class="edge">
<title>src/main&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M609.36,-270.57C609.36,-279.8 609.36,-322 609.36,-322 609.36,-322 323.33,-322 323.33,-322 323.33,-322 323.33,-201.66 323.33,-201.66"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="325.43,-201.66 323.33,-195.66 321.23,-201.66 325.43,-201.66"/>
</g>
<!-- src/main&#45;&gt;src/utl -->
<g id="edge70" class="edge">
<title>src/main&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M610.88,-270C632.19,-270 827,-270 827,-270 827,-270 827,-21 827,-21 827,-21 313.3,-21 313.3,-21"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.3,-18.9 307.3,-21 313.3,-23.1 313.3,-18.9"/>
</g>
<!-- src/main&#45;&gt;src/graph&#45;utl -->
<g id="edge72" class="edge">
<title>src/main&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M607.92,-266.94C607.92,-264.93 607.92,-262 607.92,-262 607.92,-262 645.42,-262 645.42,-262 645.42,-262 645.42,-76.92 645.42,-76.92"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="647.52,-76.92 645.42,-70.92 643.32,-76.92 647.52,-76.92"/>
</g>
<!-- src/main/resolve&#45;options -->
<g id="node19" class="node">
<title>src/main/resolve&#45;options</title>
<g id="a_node19"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/main/resolve-options" xlink:title="resolve&#45;options">
<polygon fill="#ffcccc" stroke="black" points="483.5,-243.93 406.47,-243.93 404.5,-241.95 404.5,-226.18 481.53,-226.18 483.5,-228.15 483.5,-243.93"/>
<polyline fill="none" stroke="black" points="481.53,-241.95 404.5,-241.95"/>
<polyline fill="none" stroke="black" points="481.53,-241.95 481.53,-226.18"/>
<polyline fill="none" stroke="black" points="481.53,-241.95 483.5,-243.93"/>
<text xml:space="preserve" text-anchor="start" x="412.5" y="-231.38" font-family="Helvetica,sans-Serif" font-size="9.00">resolve&#45;options</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/main/resolve&#45;options -->
<g id="edge65" class="edge">
<title>src/main&#45;&gt;src/main/resolve&#45;options</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M606.85,-268C588.4,-268 457.17,-268 457.17,-268 457.17,-268 457.17,-253.43 457.17,-253.43"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="459.27,-253.43 457.17,-247.43 455.07,-253.43 459.27,-253.43"/>
</g>
<!-- src/enrich -->
<!-- src/main&#45;&gt;src/enrich -->
<g id="edge68" class="edge">
<title>src/main&#45;&gt;src/enrich</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M610.08,-267C610.08,-262.67 610.08,-252 610.08,-252 610.08,-252 774.6,-252 774.6,-252 774.6,-252 774.6,-194.55 774.6,-194.55"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="776.7,-194.55 774.6,-188.55 772.5,-194.55 776.7,-194.55"/>
</g>
<!-- src/enrich/summarize -->
<g id="node22" class="node">
<title>src/enrich/summarize</title>
<g id="a_node22"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/enrich/summarize" xlink:title="summarize">
<polygon fill="#77eeaa" stroke="black" points="740.5,-132.93 681.47,-132.93 679.5,-130.95 679.5,-115.17 738.53,-115.17 740.5,-117.15 740.5,-132.93"/>
<polyline fill="none" stroke="black" points="738.53,-130.95 679.5,-130.95"/>
<polyline fill="none" stroke="black" points="738.53,-130.95 738.53,-115.17"/>
<polyline fill="none" stroke="black" points="738.53,-130.95 740.5,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="687.5" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">summarize</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/enrich/summarize -->
<g id="edge71" class="edge">
<title>src/main&#45;&gt;src/enrich/summarize</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M611.04,-268C623.78,-268 691.69,-268 691.69,-268 691.69,-268 691.69,-142.08 691.69,-142.08"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="693.79,-142.08 691.69,-136.08 689.59,-142.08 693.79,-142.08"/>
</g>
<!-- src/extract -->
<!-- src/main&#45;&gt;src/extract -->
<g id="edge69" class="edge">
<title>src/main&#45;&gt;src/extract</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M610.98,-269C628.04,-269 749.33,-269 749.33,-269 749.33,-269 749.33,-111 749.33,-111 749.33,-111 343.9,-111 343.9,-111 343.9,-111 343.9,-104.22 343.9,-104.22"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="346,-104.22 343.9,-98.22 341.8,-104.22 346,-104.22"/>
</g>
<!-- src/main/files&#45;and&#45;dirs -->
<g id="node30" class="node">
<title>src/main/files&#45;and&#45;dirs</title>
<g id="a_node30"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/main/files-and-dirs" xlink:title="files&#45;and&#45;dirs">
<polygon fill="#ffcccc" stroke="black" points="564.62,-243.93 497.35,-243.93 495.38,-241.95 495.38,-226.18 562.65,-226.18 564.62,-228.15 564.62,-243.93"/>
<polyline fill="none" stroke="black" points="562.65,-241.95 495.38,-241.95"/>
<polyline fill="none" stroke="black" points="562.65,-241.95 562.65,-226.18"/>
<polyline fill="none" stroke="black" points="562.65,-241.95 564.62,-243.93"/>
<text xml:space="preserve" text-anchor="start" x="503.38" y="-231.38" font-family="Helvetica,sans-Serif" font-size="9.00">files&#45;and&#45;dirs</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/main/files&#45;and&#45;dirs -->
<g id="edge63" class="edge">
<title>src/main&#45;&gt;src/main/files&#45;and&#45;dirs</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M607.05,-268C594.88,-268 530,-268 530,-268 530,-268 530,-253.43 530,-253.43"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="532.1,-253.43 530,-247.43 527.9,-253.43 532.1,-253.43"/>
</g>
<!-- src/main/options -->
<g id="node31" class="node">
<title>src/main/options</title>
<g id="a_node31"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/main/options" xlink:title="options">
<polygon fill="#ffcccc" stroke="black" points="621,-192.43 568.97,-192.43 567,-190.45 567,-174.68 619.03,-174.68 621,-176.65 621,-192.43"/>
<polyline fill="none" stroke="black" points="619.03,-190.45 567,-190.45"/>
<polyline fill="none" stroke="black" points="619.03,-190.45 619.03,-174.68"/>
<polyline fill="none" stroke="black" points="619.03,-190.45 621,-192.43"/>
<text xml:space="preserve" text-anchor="start" x="579" y="-179.88" font-family="Helvetica,sans-Serif" font-size="9.00">options</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/main/options -->
<g id="edge64" class="edge">
<title>src/main&#45;&gt;src/main/options</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M608.64,-270.78C608.64,-277.5 608.64,-299 608.64,-299 608.64,-299 570.33,-299 570.33,-299 570.33,-299 570.33,-201.64 570.33,-201.64"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="572.43,-201.64 570.33,-195.64 568.23,-201.64 572.43,-201.64"/>
</g>
<!-- src/main/rule&#45;set -->
<g id="node32" class="node">
<title>src/main/rule&#45;set</title>
<g id="a_node32"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/main/rule-set" xlink:title="rule&#45;set">
<polygon fill="#ffcccc" stroke="black" points="631,-243.93 578.97,-243.93 577,-241.95 577,-226.18 629.03,-226.18 631,-228.15 631,-243.93"/>
<polyline fill="none" stroke="black" points="629.03,-241.95 577,-241.95"/>
<polyline fill="none" stroke="black" points="629.03,-241.95 629.03,-226.18"/>
<polyline fill="none" stroke="black" points="629.03,-241.95 631,-243.93"/>
<text xml:space="preserve" text-anchor="start" x="588.62" y="-231.38" font-family="Helvetica,sans-Serif" font-size="9.00">rule&#45;set</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/main/rule&#45;set -->
<g id="edge66" class="edge">
<title>src/main&#45;&gt;src/main/rule&#45;set</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M610.86,-268C614.21,-268 620.9,-268 620.9,-268 620.9,-268 620.9,-253.43 620.9,-253.43"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="623,-253.43 620.9,-247.43 618.8,-253.43 623,-253.43"/>
</g>
<!-- src/report -->
<!-- src/main&#45;&gt;src/report -->
<g id="edge73" class="edge">
<title>src/main&#45;&gt;src/report</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M608.64,-266.55C608.64,-265.73 608.64,-265 608.64,-265 608.64,-265 1049.6,-265 1049.6,-265 1049.6,-265 1049.6,-135.07 1049.6,-135.07"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1051.7,-135.07 1049.6,-129.07 1047.5,-135.07 1051.7,-135.07"/>
</g>
<!-- src/schema -->
<g id="node34" class="node">
<title>src/schema</title>
<g id="a_node34"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/schema" xlink:title="schema">
<polygon fill="#ccffcc" stroke="red" points="154,-192.43 101.97,-192.43 100,-190.45 100,-174.68 152.03,-174.68 154,-176.65 154,-192.43"/>
<polyline fill="none" stroke="red" points="152.03,-190.45 100,-190.45"/>
<polyline fill="none" stroke="red" points="152.03,-190.45 152.03,-174.68"/>
<polyline fill="none" stroke="red" points="152.03,-190.45 154,-192.43"/>
<text xml:space="preserve" text-anchor="start" x="110.88" y="-179.88" font-family="Helvetica,sans-Serif" font-size="9.00" fill="red">schema</text>
</a>
</g>
</g>
<!-- src/main&#45;&gt;src/schema -->
<g id="edge74" class="edge">
<title>src/main&#45;&gt;src/schema</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M607.22,-270C581.11,-270 277.34,-270 277.34,-270 277.34,-270 277.34,-188 277.34,-188 277.34,-188 163.25,-188 163.25,-188"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="163.25,-185.9 157.25,-188 163.25,-190.1 163.25,-185.9"/>
</g>
<!-- src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/utl -->
<g id="edge23" class="edge">
<title>src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M242,-259.62C242,-215.45 242,-27 242,-27 242,-27 242.78,-27 242.78,-27"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="240.74,-29.1 246.74,-27 240.74,-24.9 240.74,-29.1"/>
</g>
<!-- src/extract/resolve -->
<g id="node18" class="node">
<title>src/extract/resolve</title>
<g id="a_node18"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/extract/resolve" xlink:title="resolve">
<polygon fill="#ccffcc" stroke="black" points="304,-67.5 251.97,-67.5 250,-65.53 250,-49.75 302.03,-49.75 304,-51.72 304,-67.5"/>
<polyline fill="none" stroke="black" points="302.03,-65.53 250,-65.53"/>
<polyline fill="none" stroke="black" points="302.03,-65.53 302.03,-49.75"/>
<polyline fill="none" stroke="black" points="302.03,-65.53 304,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="262" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">resolve</text>
</a>
</g>
</g>
<!-- src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/extract/resolve -->
<g id="edge21" class="edge">
<title>src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/extract/resolve</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M259.56,-259.5C259.56,-259.5 259.56,-76.85 259.56,-76.85"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="261.66,-76.85 259.56,-70.85 257.46,-76.85 261.66,-76.85"/>
</g>
<!-- src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/main/resolve&#45;options -->
<g id="edge22" class="edge">
<title>src/config&#45;utl/extract&#45;depcruise&#45;config&#45;&gt;src/main/resolve&#45;options</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M269.5,-263C334.33,-263 430.83,-263 430.83,-263 430.83,-263 430.83,-253.23 430.83,-253.23"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="432.93,-253.23 430.83,-247.23 428.73,-253.23 432.93,-253.23"/>
</g>
<!-- src/extract/tsc&#45;&gt;src/extract/transpile -->
<g id="edge58" class="edge">
<title>src/extract/tsc&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M365.33,-67.64C365.33,-96.39 365.33,-184 365.33,-184 365.33,-184 364.42,-184 364.42,-184"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="365.19,-181.9 359.19,-184 365.19,-186.1 365.19,-181.9"/>
</g>
<!-- src/extract/tsc&#45;&gt;src/utl -->
<g id="edge59" class="edge">
<title>src/extract/tsc&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M343,-49.27C343,-41.26 343,-31 343,-31 343,-31 313.25,-31 313.25,-31"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.25,-28.9 307.25,-31 313.25,-33.1 313.25,-28.9"/>
</g>
<!-- src/extract/tsc&#45;&gt;src/extract -->
<g id="edge60" class="edge">
<title>src/extract/tsc&#45;&gt;src/extract</title>
<g id="a_edge60"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M343.9,-67.74C343.9,-67.74 343.9,-82.29 343.9,-82.29"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="341.8,-82.29 343.9,-88.29 346,-82.29 341.8,-82.29"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="297.77" y="-76.21" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/report/dot -->
<g id="node38" class="node">
<title>src/report/dot</title>
<g id="a_node38"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/dot" xlink:title="dot">
<polygon fill="#ffccff" stroke="black" points="1101,-102.17 1048.97,-102.17 1047,-100.2 1047,-84.42 1099.03,-84.42 1101,-86.4 1101,-102.17"/>
<polyline fill="none" stroke="black" points="1099.03,-100.2 1047,-100.2"/>
<polyline fill="none" stroke="black" points="1099.03,-100.2 1099.03,-84.42"/>
<polyline fill="none" stroke="black" points="1099.03,-100.2 1101,-102.17"/>
<text xml:space="preserve" text-anchor="start" x="1067.62" y="-89.62" font-family="Helvetica,sans-Serif" font-size="9.00">dot</text>
</a>
</g>
</g>
<!-- src/report/dot&#45;webpage&#45;&gt;src/report/dot -->
<g id="edge91" class="edge">
<title>src/report/dot&#45;webpage&#45;&gt;src/report/dot</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1082,-114.99C1082,-114.99 1082,-111.43 1082,-111.43"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1084.1,-111.43 1082,-105.43 1079.9,-111.43 1084.1,-111.43"/>
</g>
<!-- src/extract/resolve&#45;&gt;src/utl -->
<g id="edge52" class="edge">
<title>src/extract/resolve&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M277,-49.4C277,-49.4 277,-42.88 277,-42.88"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="279.1,-42.88 277,-36.88 274.9,-42.88 279.1,-42.88"/>
</g>
<!-- src/extract/resolve&#45;&gt;src/extract -->
<g id="edge53" class="edge">
<title>src/extract/resolve&#45;&gt;src/extract</title>
<g id="a_edge53"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M285.56,-67.66C285.56,-77.84 285.56,-93 285.56,-93 285.56,-93 332.06,-93 332.06,-93"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="332.06,-95.1 338.06,-93 332.06,-90.9 332.06,-95.1"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="250.02" y="-94.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/main/resolve&#45;options&#45;&gt;src/extract/transpile -->
<g id="edge78" class="edge">
<title>src/main/resolve&#45;options&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M430.83,-225.98C430.83,-212.31 430.83,-188 430.83,-188 430.83,-188 365.32,-188 365.32,-188"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="365.32,-185.9 359.32,-188 365.32,-190.1 365.32,-185.9"/>
</g>
<!-- src/main/resolve&#45;options&#45;&gt;src/graph&#45;utl -->
<g id="edge79" class="edge">
<title>src/main/resolve&#45;options&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M457.17,-226.08C457.17,-190.2 457.17,-59 457.17,-59 457.17,-59 630.54,-59 630.54,-59"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="630.54,-61.1 636.54,-59 630.54,-56.9 630.54,-61.1"/>
</g>
<!-- src/enrich&#45;&gt;src/graph&#45;utl -->
<g id="edge29" class="edge">
<title>src/enrich&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M772,-184C756.67,-184 658.58,-184 658.58,-184 658.58,-184 658.58,-76.67 658.58,-76.67"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="660.68,-76.67 658.58,-70.67 656.48,-76.67 660.68,-76.67"/>
</g>
<!-- src/enrich/derive/folders -->
<g id="node21" class="node">
<title>src/enrich/derive/folders</title>
<g id="a_node21"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/enrich/derive/folders" xlink:title="folders">
<polygon fill="#77eeaa" stroke="black" points="953,-132.93 900.97,-132.93 899,-130.95 899,-115.17 951.03,-115.17 953,-117.15 953,-132.93"/>
<polyline fill="none" stroke="black" points="951.03,-130.95 899,-130.95"/>
<polyline fill="none" stroke="black" points="951.03,-130.95 951.03,-115.17"/>
<polyline fill="none" stroke="black" points="951.03,-130.95 953,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="912.12" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">folders</text>
</a>
</g>
</g>
<!-- src/enrich&#45;&gt;src/enrich/derive/folders -->
<g id="edge24" class="edge">
<title>src/enrich&#45;&gt;src/enrich/derive/folders</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M776.15,-184C794.62,-184 926,-184 926,-184 926,-184 926,-142.44 926,-142.44"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="928.1,-142.44 926,-136.44 923.9,-142.44 928.1,-142.44"/>
</g>
<!-- src/enrich&#45;&gt;src/enrich/summarize -->
<g id="edge25" class="edge">
<title>src/enrich&#45;&gt;src/enrich/summarize</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M771.9,-183C763.18,-183 730.38,-183 730.38,-183 730.38,-183 730.38,-142.29 730.38,-142.29"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="732.48,-142.29 730.38,-136.29 728.28,-142.29 732.48,-142.29"/>
</g>
<!-- src/enrich/derive -->
<!-- src/enrich&#45;&gt;src/enrich/derive -->
<g id="edge26" class="edge">
<title>src/enrich&#45;&gt;src/enrich/derive</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M773.4,-185.77C773.4,-187.28 773.4,-189 773.4,-189 773.4,-189 758.17,-189 758.17,-189 758.17,-189 758.17,-94 758.17,-94 758.17,-94 783.05,-94 783.05,-94"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="783.05,-96.1 789.05,-94 783.05,-91.9 783.05,-96.1"/>
</g>
<!-- src/enrich/derive/metrics -->
<g id="node24" class="node">
<title>src/enrich/derive/metrics</title>
<g id="a_node24"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/enrich/derive/metrics" xlink:title="metrics">
<polygon fill="#77eeaa" stroke="black" points="821,-132.93 768.97,-132.93 767,-130.95 767,-115.17 819.03,-115.17 821,-117.15 821,-132.93"/>
<polyline fill="none" stroke="black" points="819.03,-130.95 767,-130.95"/>
<polyline fill="none" stroke="black" points="819.03,-130.95 819.03,-115.17"/>
<polyline fill="none" stroke="black" points="819.03,-130.95 821,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="779.38" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">metrics</text>
</a>
</g>
</g>
<!-- src/enrich&#45;&gt;src/enrich/derive/metrics -->
<g id="edge27" class="edge">
<title>src/enrich&#45;&gt;src/enrich/derive/metrics</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M774.6,-181.57C774.6,-181.57 774.6,-142.41 774.6,-142.41"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="776.7,-142.41 774.6,-136.41 772.5,-142.41 776.7,-142.41"/>
</g>
<!-- src/enrich/derive/orphan -->
<g id="node25" class="node">
<title>src/enrich/derive/orphan</title>
<g id="a_node25"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/enrich/derive/orphan" xlink:title="orphan">
<polygon fill="#77eeaa" stroke="black" points="887,-132.93 834.97,-132.93 833,-130.95 833,-115.17 885.03,-115.17 887,-117.15 887,-132.93"/>
<polyline fill="none" stroke="black" points="885.03,-130.95 833,-130.95"/>
<polyline fill="none" stroke="black" points="885.03,-130.95 885.03,-115.17"/>
<polyline fill="none" stroke="black" points="885.03,-130.95 887,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="845.38" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">orphan</text>
</a>
</g>
</g>
<!-- src/enrich&#45;&gt;src/enrich/derive/orphan -->
<g id="edge28" class="edge">
<title>src/enrich&#45;&gt;src/enrich/derive/orphan</title>
<path fill="none" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" d="M776.16,-183C789.64,-183 861.5,-183 861.5,-183 861.5,-183 861.5,-142.29 861.5,-142.29"/>
<polygon fill="#007766" fill-opacity="0.466667" stroke="#007766" stroke-width="2" stroke-opacity="0.466667" points="863.6,-142.29 861.5,-136.29 859.4,-142.29 863.6,-142.29"/>
</g>
<!-- src/validate -->
<g id="node26" class="node">
<title>src/validate</title>
<g id="a_node26"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/validate" xlink:title="validate">
<polygon fill="#ccccff" stroke="black" points="1021,-67.5 968.97,-67.5 967,-65.53 967,-49.75 1019.03,-49.75 1021,-51.72 1021,-67.5"/>
<polyline fill="none" stroke="black" points="1019.03,-65.53 967,-65.53"/>
<polyline fill="none" stroke="black" points="1019.03,-65.53 1019.03,-49.75"/>
<polyline fill="none" stroke="black" points="1019.03,-65.53 1021,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="977.88" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">validate</text>
</a>
</g>
</g>
<!-- src/enrich&#45;&gt;src/validate -->
<g id="edge30" class="edge">
<title>src/enrich&#45;&gt;src/validate</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M773.4,-181.48C773.4,-179.56 773.4,-177 773.4,-177 773.4,-177 1007.5,-177 1007.5,-177 1007.5,-177 1007.5,-76.94 1007.5,-76.94"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1009.6,-76.94 1007.5,-70.94 1005.4,-76.94 1009.6,-76.94"/>
</g>
<!-- src/enrich/derive/folders&#45;&gt;src/utl -->
<g id="edge37" class="edge">
<title>src/enrich/derive/folders&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M939.5,-114.82C939.5,-89.35 939.5,-20 939.5,-20 939.5,-20 313.23,-20 313.23,-20"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.23,-17.9 307.23,-20 313.23,-22.1 313.23,-17.9"/>
</g>
<!-- src/enrich/derive/folders&#45;&gt;src/graph&#45;utl -->
<g id="edge36" class="edge">
<title>src/enrich/derive/folders&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M926,-114.89C926,-95.9 926,-54 926,-54 926,-54 703.26,-54 703.26,-54"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="703.26,-51.9 697.26,-54 703.26,-56.1 703.26,-51.9"/>
</g>
<!-- src/enrich/derive/folders&#45;&gt;src/enrich/derive -->
<g id="edge35" class="edge">
<title>src/enrich/derive/folders&#45;&gt;src/enrich/derive</title>
<g id="a_edge35"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M912.5,-114.9C912.5,-105.74 912.5,-93 912.5,-93 912.5,-93 805.08,-93 805.08,-93"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="805.08,-90.9 799.08,-93 805.08,-95.1 805.08,-90.9"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="915.87" y="-94.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/enrich/derive/folders&#45;&gt;src/validate -->
<g id="edge34" class="edge">
<title>src/enrich/derive/folders&#45;&gt;src/validate</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M953.27,-119C972.18,-119 994,-119 994,-119 994,-119 994,-76.82 994,-76.82"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="996.1,-76.82 994,-70.82 991.9,-76.82 996.1,-76.82"/>
</g>
<!-- src/enrich/summarize&#45;&gt;src/utl -->
<g id="edge42" class="edge">
<title>src/enrich/summarize&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M717.25,-114.99C717.25,-90.02 717.25,-22 717.25,-22 717.25,-22 313.23,-22 313.23,-22"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.23,-19.9 307.23,-22 313.23,-24.1 313.23,-19.9"/>
</g>
<!-- src/enrich/summarize&#45;&gt;src/graph&#45;utl -->
<g id="edge41" class="edge">
<title>src/enrich/summarize&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M684.33,-114.68C684.33,-114.68 684.33,-77.01 684.33,-77.01"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="686.43,-77.01 684.33,-71.01 682.23,-77.01 686.43,-77.01"/>
</g>
<!-- src/enrich/derive&#45;&gt;src/utl -->
<g id="edge32" class="edge">
<title>src/enrich/derive&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M792.03,-94C767.87,-94 530,-94 530,-94 530,-94 530,-27 530,-27 530,-27 313.1,-27 313.1,-27"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.1,-24.9 307.1,-27 313.1,-29.1 313.1,-24.9"/>
</g>
<!-- src/enrich/derive&#45;&gt;src/graph&#45;utl -->
<g id="edge31" class="edge">
<title>src/enrich/derive&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M794.6,-91.46C794.6,-84.33 794.6,-59 794.6,-59 794.6,-59 703.4,-59 703.4,-59"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="703.4,-56.9 697.4,-59 703.4,-61.1 703.4,-56.9"/>
</g>
<!-- src/enrich/derive&#45;&gt;src/validate -->
<g id="edge33" class="edge">
<title>src/enrich/derive&#45;&gt;src/validate</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M793.4,-91.31C793.4,-89.46 793.4,-87 793.4,-87 793.4,-87 980.5,-87 980.5,-87 980.5,-87 980.5,-76.94 980.5,-76.94"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="982.6,-76.94 980.5,-70.94 978.4,-76.94 982.6,-76.94"/>
</g>
<!-- src/enrich/derive/metrics&#45;&gt;src/graph&#45;utl -->
<g id="edge39" class="edge">
<title>src/enrich/derive/metrics&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M779.6,-114.78C779.6,-97.7 779.6,-63 779.6,-63 779.6,-63 703.28,-63 703.28,-63"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="703.28,-60.9 697.28,-63 703.28,-65.1 703.28,-60.9"/>
</g>
<!-- src/enrich/derive/metrics&#45;&gt;src/enrich/derive -->
<g id="edge38" class="edge">
<title>src/enrich/derive/metrics&#45;&gt;src/enrich/derive</title>
<g id="a_edge38"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M794,-114.99C794,-114.99 794,-104.44 794,-104.44"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="796.1,-104.44 794,-98.44 791.9,-104.44 796.1,-104.44"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="747.88" y="-101.17" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/enrich/derive/orphan&#45;&gt;src/enrich/derive -->
<g id="edge40" class="edge">
<title>src/enrich/derive/orphan&#45;&gt;src/enrich/derive</title>
<g id="a_edge40"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M860,-114.87C860,-106.03 860,-94 860,-94 860,-94 804.93,-94 804.93,-94"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="804.93,-91.9 798.93,-94 804.93,-96.1 804.93,-91.9"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="796.78" y="-85.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/validate&#45;&gt;src/utl -->
<g id="edge94" class="edge">
<title>src/validate&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M994,-49.61C994,-37.64 994,-18 994,-18 994,-18 313.26,-18 313.26,-18"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.26,-15.9 307.26,-18 313.26,-20.1 313.26,-15.9"/>
</g>
<!-- src/extract&#45;&gt;src/extract/transpile -->
<g id="edge48" class="edge">
<title>src/extract&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M344.89,-92C349.45,-92 360.67,-92 360.67,-92 360.67,-92 360.67,-179 360.67,-179 360.67,-179 360.23,-179 360.23,-179"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="365.29,-176.9 359.29,-179 365.29,-181.1 365.29,-176.9"/>
</g>
<!-- src/extract&#45;&gt;src/utl -->
<g id="edge47" class="edge">
<title>src/extract&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M343,-95.36C343,-96.99 343,-99 343,-99 343,-99 312,-99 312,-99 312,-99 312,-32 312,-32 312,-32 311.22,-32 311.22,-32"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.26,-29.9 307.26,-32 313.26,-34.1 313.26,-29.9"/>
</g>
<!-- src/extract&#45;&gt;src/graph&#45;utl -->
<g id="edge49" class="edge">
<title>src/extract&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M343,-91.15C343,-90.08 343,-89 343,-89 343,-89 642.71,-89 642.71,-89 642.71,-89 642.71,-76.93 642.71,-76.93"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="644.81,-76.93 642.71,-70.93 640.61,-76.93 644.81,-76.93"/>
</g>
<!-- src/extract&#45;&gt;src/extract/tsc -->
<g id="edge46" class="edge">
<title>src/extract&#45;&gt;src/extract/tsc</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M341.23,-92C337.39,-92 328.6,-92 328.6,-92 328.6,-92 328.6,-76.77 328.6,-76.77"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="330.7,-76.77 328.6,-70.77 326.5,-76.77 330.7,-76.77"/>
</g>
<!-- src/extract&#45;&gt;src/extract/resolve -->
<g id="edge44" class="edge">
<title>src/extract&#45;&gt;src/extract/resolve</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M342.1,-91.31C342.1,-89.14 342.1,-86 342.1,-86 342.1,-86 293.78,-86 293.78,-86 293.78,-86 293.78,-76.92 293.78,-76.92"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="295.88,-76.92 293.78,-70.92 291.68,-76.92 295.88,-76.92"/>
</g>
<!-- src/extract/acorn -->
<g id="node28" class="node">
<title>src/extract/acorn</title>
<g id="a_node28"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/extract/acorn" xlink:title="acorn">
<polygon fill="#ccffcc" stroke="black" points="238,-67.5 185.97,-67.5 184,-65.53 184,-49.75 236.03,-49.75 238,-51.72 238,-67.5"/>
<polyline fill="none" stroke="black" points="236.03,-65.53 184,-65.53"/>
<polyline fill="none" stroke="black" points="236.03,-65.53 236.03,-49.75"/>
<polyline fill="none" stroke="black" points="236.03,-65.53 238,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="199.38" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">acorn</text>
</a>
</g>
</g>
<!-- src/extract&#45;&gt;src/extract/acorn -->
<g id="edge43" class="edge">
<title>src/extract&#45;&gt;src/extract/acorn</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M340.87,-94C324.53,-94 220,-94 220,-94 220,-94 220,-76.95 220,-76.95"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="222.1,-76.95 220,-70.95 217.9,-76.95 222.1,-76.95"/>
</g>
<!-- src/extract&#45;&gt;src/extract/swc -->
<g id="edge45" class="edge">
<title>src/extract&#45;&gt;src/extract/swc</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M345.02,-93C347.21,-93 350.4,-93 350.4,-93 350.4,-93 350.4,-105.87 350.4,-105.87"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="348.3,-105.87 350.4,-111.87 352.5,-105.87 348.3,-105.87"/>
</g>
<!-- src/extract/acorn&#45;&gt;src/extract/transpile -->
<g id="edge50" class="edge">
<title>src/extract/acorn&#45;&gt;src/extract/transpile</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M202,-67.64C202,-96.39 202,-184 202,-184 202,-184 292.73,-184 292.73,-184"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="292.73,-186.1 298.73,-184 292.73,-181.9 292.73,-186.1"/>
</g>
<!-- src/extract/acorn&#45;&gt;src/utl -->
<g id="edge51" class="edge">
<title>src/extract/acorn&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M211,-49.26C211,-38.71 211,-23 211,-23 211,-23 240.75,-23 240.75,-23"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="240.75,-25.1 246.75,-23 240.75,-20.9 240.75,-25.1"/>
</g>
<!-- src/extract/swc&#45;&gt;src/utl -->
<g id="edge54" class="edge">
<title>src/extract/swc&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M308,-114.99C308,-91.96 308,-33 308,-33 308,-33 307.62,-33 307.62,-33"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.23,-30.9 307.23,-33 313.23,-35.1 313.23,-30.9"/>
</g>
<!-- src/extract/swc&#45;&gt;src/extract -->
<g id="edge55" class="edge">
<title>src/extract/swc&#45;&gt;src/extract</title>
<g id="a_edge55"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M342.1,-114.99C342.1,-114.99 342.1,-104.44 342.1,-104.44"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="344.2,-104.44 342.1,-98.44 340,-104.44 344.2,-104.44"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="388.23" y="-101.17" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/main/options&#45;&gt;src/utl -->
<g id="edge77" class="edge">
<title>src/main/options&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M594,-174.63C594,-141.3 594,-26 594,-26 594,-26 313.33,-26 313.33,-26"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.33,-23.9 307.33,-26 313.33,-28.1 313.33,-23.9"/>
</g>
<!-- src/main/options&#45;&gt;src/main -->
<g id="edge76" class="edge">
<title>src/main/options&#45;&gt;src/main</title>
<g id="a_edge76"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M573.67,-192.89C573.67,-216 573.67,-274 573.67,-274 573.67,-274 607.92,-274 607.92,-274 607.92,-274 607.92,-273.64 607.92,-273.64"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="610.02,-279.47 607.92,-273.47 605.82,-279.47 610.02,-279.47"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="527.54" y="-251.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/main/options&#45;&gt;src/report -->
<g id="edge75" class="edge">
<title>src/main/options&#45;&gt;src/report</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M621.23,-179C720.45,-179 1056.9,-179 1056.9,-179 1056.9,-179 1056.9,-124 1056.9,-124 1056.9,-124 1056.33,-124 1056.33,-124"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1060.19,-121.9 1054.19,-124 1060.19,-126.1 1060.19,-121.9"/>
</g>
<!-- src/main/rule&#45;set&#45;&gt;src/utl -->
<g id="edge83" class="edge">
<title>src/main/rule&#45;set&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M626,-225.75C626,-185.1 626,-25 626,-25 626,-25 313.41,-25 313.41,-25"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.41,-22.9 307.41,-25 313.41,-27.1 313.41,-22.9"/>
</g>
<!-- src/main/rule&#45;set&#45;&gt;src/main -->
<g id="edge80" class="edge">
<title>src/main/rule&#45;set&#45;&gt;src/main</title>
<g id="a_edge80"><a xlink:title="not&#45;to&#45;ancestor&#45;folders">
<path fill="none" stroke="blue" stroke-width="2" d="M609.36,-244.27C609.36,-244.27 609.36,-257.89 609.36,-257.89"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="607.26,-257.89 609.36,-263.89 611.46,-257.89 607.26,-257.89"/>
</a>
</g>
<text xml:space="preserve" text-anchor="middle" x="655.49" y="-252.28" font-family="Helvetica,sans-Serif" font-size="9.00" fill="blue">not&#45;to&#45;ancestor&#45;folders</text>
</g>
<!-- src/main/rule&#45;set&#45;&gt;src/main/options -->
<g id="edge81" class="edge">
<title>src/main/rule&#45;set&#45;&gt;src/main/options</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M606.33,-226.08C606.33,-226.08 606.33,-201.79 606.33,-201.79"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="608.43,-201.79 606.33,-195.79 604.23,-201.79 608.43,-201.79"/>
</g>
<!-- src/main/rule&#45;set&#45;&gt;src/schema -->
<g id="edge82" class="edge">
<title>src/main/rule&#45;set&#45;&gt;src/schema</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M591.67,-225.94C591.67,-218.43 591.67,-209 591.67,-209 591.67,-209 127,-209 127,-209 127,-209 127,-201.77 127,-201.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="129.1,-201.77 127,-195.77 124.9,-201.77 129.1,-201.77"/>
</g>
<!-- src/report&#45;&gt;src/utl -->
<g id="edge86" class="edge">
<title>src/report&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M1047.14,-125C1034.36,-125 960,-125 960,-125 960,-125 960,-19 960,-19 960,-19 313.22,-19 313.22,-19"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.22,-16.9 307.22,-19 313.22,-21.1 313.22,-16.9"/>
</g>
<!-- src/report&#45;&gt;src/graph&#45;utl -->
<g id="edge85" class="edge">
<title>src/report&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M1048.4,-126.02C1048.4,-132.68 1048.4,-154 1048.4,-154 1048.4,-154 669.04,-154 669.04,-154 669.04,-154 669.04,-76.8 669.04,-76.8"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="671.14,-76.8 669.04,-70.8 666.94,-76.8 671.14,-76.8"/>
</g>
<!-- src/report/utl -->
<g id="node35" class="node">
<title>src/report/utl</title>
<g id="a_node35"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/utl" xlink:title="utl">
<polygon fill="#ffccff" stroke="black" points="1188,-67.5 1135.97,-67.5 1134,-65.53 1134,-49.75 1186.03,-49.75 1188,-51.72 1188,-67.5"/>
<polyline fill="none" stroke="black" points="1186.03,-65.53 1134,-65.53"/>
<polyline fill="none" stroke="black" points="1186.03,-65.53 1186.03,-49.75"/>
<polyline fill="none" stroke="black" points="1186.03,-65.53 1188,-67.5"/>
<text xml:space="preserve" text-anchor="start" x="1156.12" y="-54.95" font-family="Helvetica,sans-Serif" font-size="9.00">utl</text>
</a>
</g>
</g>
<!-- src/report&#45;&gt;src/report/utl -->
<g id="edge84" class="edge">
<title>src/report&#45;&gt;src/report/utl</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1047.16,-123C1043.16,-123 1034,-123 1034,-123 1034,-123 1034,-56 1034,-56 1034,-56 1124.73,-56 1124.73,-56"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1124.73,-58.1 1130.73,-56 1124.73,-53.9 1124.73,-58.1"/>
</g>
<!-- src/report/error&#45;html -->
<g id="node36" class="node">
<title>src/report/error&#45;html</title>
<g id="a_node36"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/error-html" xlink:title="error&#45;html">
<polygon fill="#ffccff" stroke="black" points="1168.88,-102.17 1115.1,-102.17 1113.12,-100.2 1113.12,-84.42 1166.9,-84.42 1168.88,-86.4 1168.88,-102.17"/>
<polyline fill="none" stroke="black" points="1166.9,-100.2 1113.12,-100.2"/>
<polyline fill="none" stroke="black" points="1166.9,-100.2 1166.9,-84.42"/>
<polyline fill="none" stroke="black" points="1166.9,-100.2 1168.88,-102.17"/>
<text xml:space="preserve" text-anchor="start" x="1121.12" y="-89.62" font-family="Helvetica,sans-Serif" font-size="9.00">error&#45;html</text>
</a>
</g>
</g>
<!-- src/report&#45;&gt;src/report/error&#45;html -->
<g id="edge87" class="edge">
<title>src/report&#45;&gt;src/report/error&#45;html</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1049,-121.96C1049,-117.41 1049,-107 1049,-107 1049,-107 1123.06,-107 1123.06,-107 1123.06,-107 1123.06,-106.57 1123.06,-106.57"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1125.16,-111.69 1123.06,-105.69 1120.96,-111.69 1125.16,-111.69"/>
</g>
<!-- src/report/error&#45;html&#45;&gt;src/report/utl -->
<g id="edge92" class="edge">
<title>src/report/error&#45;html&#45;&gt;src/report/utl</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1151.44,-84.19C1151.44,-84.19 1151.44,-76.58 1151.44,-76.58"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1153.54,-76.58 1151.44,-70.58 1149.34,-76.58 1153.54,-76.58"/>
</g>
<!-- src/report/anon -->
<g id="node37" class="node">
<title>src/report/anon</title>
<g id="a_node37"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/anon" xlink:title="anon">
<polygon fill="#ffccff" stroke="black" points="1224,-132.93 1171.97,-132.93 1170,-130.95 1170,-115.17 1222.03,-115.17 1224,-117.15 1224,-132.93"/>
<polyline fill="none" stroke="black" points="1222.03,-130.95 1170,-130.95"/>
<polyline fill="none" stroke="black" points="1222.03,-130.95 1222.03,-115.17"/>
<polyline fill="none" stroke="black" points="1222.03,-130.95 1224,-132.93"/>
<text xml:space="preserve" text-anchor="start" x="1186.5" y="-120.38" font-family="Helvetica,sans-Serif" font-size="9.00">anon</text>
</a>
</g>
</g>
<!-- src/report/dot&#45;&gt;src/utl -->
<g id="edge89" class="edge">
<title>src/report/dot&#45;&gt;src/utl</title>
<path fill="none" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" d="M1065,-83.94C1065,-63.57 1065,-17 1065,-17 1065,-17 313.15,-17 313.15,-17"/>
<polygon fill="#aaaaaa" fill-opacity="0.466667" stroke="#aaaaaa" stroke-width="2" stroke-opacity="0.466667" points="313.15,-14.9 307.15,-17 313.15,-19.1 313.15,-14.9"/>
</g>
<!-- src/report/dot&#45;&gt;src/graph&#45;utl -->
<g id="edge88" class="edge">
<title>src/report/dot&#45;&gt;src/graph&#45;utl</title>
<path fill="none" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" d="M1046.63,-90C958.71,-90 689.17,-90 689.17,-90 689.17,-90 689.17,-76.9 689.17,-76.9"/>
<polygon fill="#770000" fill-opacity="0.466667" stroke="#770000" stroke-width="2" stroke-opacity="0.466667" points="691.27,-76.9 689.17,-70.9 687.07,-76.9 691.27,-76.9"/>
</g>
<!-- src/report/dot&#45;&gt;src/report/utl -->
<g id="edge90" class="edge">
<title>src/report/dot&#45;&gt;src/report/utl</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1083,-84.08C1083,-74.85 1083,-62 1083,-62 1083,-62 1124.69,-62 1124.69,-62"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1124.69,-64.1 1130.69,-62 1124.69,-59.9 1124.69,-64.1"/>
</g>
<!-- src/report/html -->
<g id="node39" class="node">
<title>src/report/html</title>
<g id="a_node39"><a xlink:href="https://github.com/sverweij/dependency-cruiser/blob/main/src/report/html" xlink:title="html">
<polygon fill="#ffccff" stroke="black" points="1249,-102.17 1196.97,-102.17 1195,-100.2 1195,-84.42 1247.03,-84.42 1249,-86.4 1249,-102.17"/>
<polyline fill="none" stroke="black" points="1247.03,-100.2 1195,-100.2"/>
<polyline fill="none" stroke="black" points="1247.03,-100.2 1247.03,-84.42"/>
<polyline fill="none" stroke="black" points="1247.03,-100.2 1249,-102.17"/>
<text xml:space="preserve" text-anchor="start" x="1213.38" y="-89.62" font-family="Helvetica,sans-Serif" font-size="9.00">html</text>
</a>
</g>
</g>
<!-- src/report/html&#45;&gt;src/report/utl -->
<g id="edge93" class="edge">
<title>src/report/html&#45;&gt;src/report/utl</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M1194.52,-93C1186.1,-93 1179,-93 1179,-93 1179,-93 1179,-76.68 1179,-76.68"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1181.1,-76.68 1179,-70.68 1176.9,-76.68 1181.1,-76.68"/>
</g>
</g>
</svg>
    <script>
      var gMode = new Mode();

var title2ElementMap = (function makeElementMap() {
  /** @type {NodeListOf<SVGGElement>} */
  var nodes = document.querySelectorAll(".node");
  /** @type {NodeListOf<SVGGElement>} */
  var edges = document.querySelectorAll(".edge");
  return new Title2ElementMap(edges, nodes);
})();

function getHoverHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function hoverHighlightHandler(pMouseEvent) {
    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (
      currentHighlightedTitle !== closestTitleText &&
      gMode.get() === gMode.HOVER
    ) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}

function getSelectHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function selectHighlightHandler(pMouseEvent) {
    pMouseEvent.preventDefault();

    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (closestNodeOrEdge) {
      gMode.setToSelect();
    } else {
      gMode.setToHover();
    }
    if (currentHighlightedTitle !== closestTitleText) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}
function Mode() {
  var HOVER = 1;
  var SELECT = 2;

  function setToHover() {
    this._mode = HOVER;
  }
  function setToSelect() {
    this._mode = SELECT;
  }

  /**
   * @returns {number}
   */
  function get() {
    return this._mode || HOVER;
  }

  return {
    HOVER: HOVER,
    SELECT: SELECT,
    setToHover: setToHover,
    setToSelect: setToSelect,
    get: get,
  };
}

/**
 *
 * @param {SVGGelement[]} pEdges
 * @param {SVGGElement[]} pNodes
 * @return {{get: (pTitleText:string) => SVGGElement[]}}
 */
function Title2ElementMap(pEdges, pNodes) {
  /* {{[key: string]: SVGGElement[]}} */
  var elementMap = buildMap(pEdges, pNodes);

  /**
   * @param {NodeListOf<SVGGElement>} pEdges
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement[]}}
   */
  function buildMap(pEdges, pNodes) {
    var title2NodeMap = buildTitle2NodeMap(pNodes);

    return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
  }
  /**
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement}}
   */
  function buildTitle2NodeMap(pNodes) {
    return nodeListToArray(pNodes).reduce(addNodeToMap, {});
  }

  function addNodeToMap(pMap, pNode) {
    var titleText = getTitleText(pNode);

    if (titleText) {
      pMap[titleText] = pNode;
    }
    return pMap;
  }

  function addEdgeToMap(pNodeMap) {
    return function (pEdgeMap, pEdge) {
      /** @type {string} */
      var titleText = getTitleText(pEdge);

      if (titleText) {
        var edge = pryEdgeFromTitle(titleText);

        pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
        (pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
        (pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
      }
      return pEdgeMap;
    };
  }

  /**
   *
   * @param {string} pString
   * @return {{from?: string; to?:string;}}
   */
  function pryEdgeFromTitle(pString) {
    var nodeNames = pString.split(/\s*->\s*/);

    return {
      from: nodeNames.shift(),
      to: nodeNames.shift(),
    };
  }
  /**
   *
   * @param {string} pTitleText
   * @return {SVGGElement[]}
   */
  function get(pTitleText) {
    return (pTitleText && elementMap[pTitleText]) || [];
  }
  return {
    get: get,
  };
}

/**
 * @param {SVGGElement} pGElement
 * @return {string?}
 */
function getTitleText(pGElement) {
  /** @type {SVGTitleElement} */
  var title = pGElement && pGElement.querySelector("title");
  /** @type {string} */
  var titleText = title && title.textContent;

  if (titleText) {
    titleText = titleText.trim();
  }
  return titleText;
}

/**
 * @param {NodeListOf<Element>} pNodeList
 * @return {Element[]}
 */
function nodeListToArray(pNodeList) {
  var lReturnValue = [];

  pNodeList.forEach(function (pElement) {
    lReturnValue.push(pElement);
  });

  return lReturnValue;
}

function resetNodesAndEdges() {
  nodeListToArray(document.querySelectorAll(".current")).forEach(
    removeHighlight,
  );
}

/**
 * @param {SVGGElement} pGElement
 */
function removeHighlight(pGElement) {
  if (pGElement && pGElement.classList) {
    pGElement.classList.remove("current");
  }
}

/**
 * @param {SVGGElement} pGroup
 */
function addHighlight(pGroup) {
  if (pGroup && pGroup.classList) {
    pGroup.classList.add("current");
  }
}

var gHints = {
  HIDDEN: 1,
  SHOWN: 2,
  state: 1, // === HIDDEN
  show: function () {
    document.getElementById("hints").removeAttribute("style");
    gHints.state = gHints.SHOWN;
  },
  hide: function () {
    document.getElementById("hints").style = "display:none";
    gHints.state = gHints.HIDDEN;
  },
  toggle: function () {
    if ((gHints.state || gHints.HIDDEN) === gHints.HIDDEN) {
      gHints.show();
    } else {
      gHints.hide();
    }
  },
};

/** @param {KeyboardEvent} pKeyboardEvent */
function keyboardEventHandler(pKeyboardEvent) {
  if (pKeyboardEvent.key === "Escape") {
    resetNodesAndEdges();
    gMode.setToHover();
    gHints.hide();
  }
  if (pKeyboardEvent.key === "F1") {
    pKeyboardEvent.preventDefault();
    gHints.toggle();
  }
}

document.addEventListener("contextmenu", getSelectHandler(title2ElementMap));
document.addEventListener("mouseover", getHoverHandler(title2ElementMap));
document.addEventListener("keydown", keyboardEventHandler);
document.getElementById("close-hints").addEventListener("click", gHints.hide);
document.getElementById("button_help").addEventListener("click", gHints.toggle);
document.querySelector("svg").insertAdjacentHTML(
  "afterbegin",
  `<linearGradient id="edgeGradient">
      <stop offset="0%" stop-color="fuchsia"/>
      <stop offset="100%" stop-color="purple"/>
   </linearGradient>
  `,
);

// Add a small increment to the last value of the path to make gradients on
// horizontal paths work. Without them all browsers I tested with (firefox,
// chrome) do not render the gradient, but instead make the line transparent
// (or the color of the background, I haven't looked into it that deeply,
// but for the hack it doesn't matter which).
function skewLineABit(lDrawingInstructions) {
  var lLastValue = lDrawingInstructions.match(/(\d+\.?\d*)$/)[0];
  // Smaller values than .001 _should_ work as well, but don't in all
  // cases. Even this value is so small that it is not visible to the
  // human eye (tested with the two I have at my disposal).
  var lIncrement = 0.001;
  var lNewLastValue = parseFloat(lLastValue) + lIncrement;

  return lDrawingInstructions.replace(lLastValue, lNewLastValue);
}

nodeListToArray(document.querySelectorAll("path"))
  .filter(function (pElement) {
    return pElement.parentElement.classList.contains("edge");
  })
  .forEach(function (pElement) {
    pElement.attributes.d.value = skewLineABit(pElement.attributes.d.value);
  });

    </script>
  </body>
</html>
